package main.java;

public class TypeFilterProcessor<T, R> implements DataProcessor<T> {
    private Class<R> targetType;

    // 构造器：传入目标类型（类型令牌）
    public TypeFilterProcessor(Class<R> targetType) {
        if (targetType == null) {
            throw new IllegalArgumentException("targetType cannot be null");
        }
        this.targetType = targetType;
    }

    @Override
    public DataContainer<T> process(DataContainer<T> input) {
        if (input == null) {
            throw new IllegalArgumentException("input cannot be null");
        }
        DataContainer<T> result = new DataContainer<>();
        for (int i = 0; i < input.size(); i++) {
            T element = input.get(i);
            // 类型检查：使用Class.isInstance()，支持子类（如Integer → Number）
            if (element != null && targetType.isInstance(element)) {
                result.add(element);
            }
        }
        return result;
    }

    // 个性化要求：处理器名称包含学生姓名（李蓉曼）
    @Override
    public String getProcessorName() {
        return "李蓉曼的类型过滤处理器";
    }
}